package com.yqh.service.impl;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.yqh.dao.ProductDao;
import com.yqh.dto.ProductSearchDTO;
import com.yqh.entity.Product;
import com.yqh.exception.CustomException;
import com.yqh.service.ProductService;
import com.yqh.vo.ProductSearchVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 商品模块
 *
 * @author 阳秋豪
 * @createTime 2024/3/22
 */
@Service
public class ProductServiceImpl implements ProductService {
    @Autowired
    private ProductDao productDao;

    /**
     * 查询所有商品
     */
    @Override
    public List<Product> getAllProduct() {
        return productDao.selectAll();
    }

    /**
     * 根据条件参数查询商品
     *
     * @param productSearchDTO 查询参数
     */
    @Override
    public PageInfo<ProductSearchVO> getSearchProduct(ProductSearchDTO productSearchDTO) {
        // 开启分页查询，查询时会按照设置的条件自动加上 limit 进行分页
        PageHelper.startPage(productSearchDTO.getPageNum(), productSearchDTO.getPageSize());
        List<ProductSearchVO> searchProduct = productDao.getSearchProduct(productSearchDTO);
        // PageInfo.of(searchProduct) 将查询结果与分页所需数据进行封装，如总记录数
        return PageInfo.of(searchProduct);
    }

    /**
     * 添加商品
     *
     * @param product 商品信息
     * @return 成功
     */
    @Override
    public void addProduct(Product product) {
        // 进行重复性判断，通知用户商品名不允许重复
        Product product1 = productDao.findByProductName(product.getProductName());
        if (product1 != null) {
            // 商品已存在
            throw new CustomException("该商品已存在，请重新添加");
        }
        productDao.insertSelective(product);
    }

    /**
     * 编辑商品
     *
     * @param product 商品信息
     * @return 成功
     */
    @Override
    public void alterProduct(Product product) {
        productDao.updateByPrimaryKeySelective(product);
    }

    /**
     * 删除商品
     *
     * @param productId
     * @return 成功
     */
    @Override
    public void deleteProduct(Integer productId) {
        productDao.deleteByPrimaryKey(productId);
    }
}
